<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button>qwer</button>
    <button>rew</button>
    <script>

        // let arr = [1,2,42,3];
        // for(let value of arr){
        //     console.log(value);
        // }
        // let set = new Set(arr);
        // for(let value of set){
        //     console.log(value);
        // }
        // let map = new Map([['name','lili'],['age',19],['sex','nv']])
        // for(let key of map){
        //     console.log(key);
        // }
        // for(let value of map){
        //     console.log(value);
        // }

        // let str = '98765432';
        // console.log(str);
        // for(let value of str){
        //     console.log(value);
        // }

        // let btn = document.querySelectorAll('button')
        // for(let item of btn){
        //     console.log(item);
        // }

        // let obj = {
        //     name:'keke',
        //     age:5,
        //     sex:'nan'
        // }
        // console.log(obj);
        // // for(let key of obj){
        // //     console.log(key);
        // //}//报错
            // 总结：for  of  可以遍历数组，set，map，字符串，伪数组。不能够遍历对象

        // iterator
        let arr = ['小米','华为','苹果','三星','魅族'];
        // function mockIterator(target){
        //     let index = 0;
        //     return{
        //         next(){
        //             return index < target.length ? {
        //                 value:target[index++],
        //                 done:false
        //             }:{
        //                 value:target[index++],
        //                 done:true
        //             }
        //         }
        //     }
        // }
        // let aa = mockIterator(arr);
        // console.log(aa.next());
        // console.log(aa.next());
        // console.log(aa.next());
        // console.log(aa.next());
        // console.log(aa.next());
        // console.log(aa.next());

        // function mockIterator(){
        //     let that = this;
        //     console.log(that);
        //     let index = 0;
        //     console.log(index);
        //     return{
        //         next(){
        //             return index < that.length ? {
        //                 value:that[index++],
        //                 done:false
        //             }:{
        //                 value:that[index++],
        //                 done:true
        //             }
        //         }
        //     }
        // }
        // console.log(arr);
        // Array.prototype[Symbol.iterator] = mockIterator;
        // console.log(arr);
       
        function mockIterator(){
            let that = this;
            let index = 0;
            if(Array.isArray(that)){
                return{
                    next(){
                        return index < that.length ? {
                            value:that[index++],
                            done:false
                        }:{
                            value:that[index++],
                            done:true
                        }
                    }
                }
            }else{
                let keys = Object.keys(that);
                return{
                    next(){
                        return index < keys.length?{
                            value:that[keys[index++]],
                            done:false
                        }:{
                            value:that[keys[index++]],
                            done:true
                        }
                    }
                }
            }
        }
        Array.prototype[Symbol.iterator] = mockIterator;
        Object.prototype[Symbol.iterator] = mockIterator;
        console.log(arr);



    </script>

</body>
</html>